package reflect;

import java.io.File;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URISyntaxException;

/*
* 调用与当前类Test2在同一个包中那些类的所有公开的无参方法
* 提示：文件名与其中定义的类名一致
* */
public class Test2 {
    public static void main(String[] args) throws Exception {
        //定义的是Test2.class文件所在的目录
        File dir = new File(
                Test2.class.getResource(".").toURI() //D:\study\java第二阶段\JSD2303_SE\target\classes\reflect
        );

        String packageName = Test2.class.getPackage().getName();
        File[] files = dir.listFiles(f->f.getName().endsWith(".class"));
        //获取该目录中的所有class文件
        for (File file : files){
            String fileName = file.getName();
            String className = fileName.substring(0,fileName.indexOf("."));
            //System.out.println(className);
            Class cls = Class.forName(packageName+"."+className);
            //System.out.println(cls);
            Object obj = cls.newInstance();
            Method[] methods = cls.getDeclaredMethods();
            for (Method method : methods){
                if(method.getParameterCount() == 0//是否无参
                        &&
                        method.getModifiers() == Modifier.PUBLIC //该方法是否为公开方法
                ){
                    //method.setAccessible(true);
                    method.invoke(obj);
                }
                //System.out.println(method.getParameterCount());
            }
        }
        System.out.println(dir);
    }
}
